package com.zjsru.oneDay202209;

/**
 * @Author: likew
 * @Date: 2022/9/30
 * 零矩阵
 * 若M × N矩阵中某个元素为0，则将其所在的行与列清零
 *
 * 输入：
 * [
 *   [1,1,1],
 *   [1,0,1],
 *   [1,1,1]
 * ]
 * 输出：
 * [
 *   [1,0,1],
 *   [0,0,0],
 *   [1,0,1]
 * ]
 */
public class SetZeroes {
    
    /***
     * 模拟
     */
    
    public void setZeroes(int[][] matrix) {
        int n = matrix.length, m = matrix[0].length;
        boolean[] rows = new boolean[n], cols = new boolean[m];
        //双重循环将该位行数和列数位置做上true标记
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] == 0) {
                    rows[i] = cols[j] = true;
                }
            }
        }
        //第二次双重循环，将上一轮循环做上标记的赋值0，由于行数和列数的次位决定，
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (cols[j] || rows[i]) {
                    matrix[i][j] = 0;
                }
            }
        }
    }
    
    public static void main(String[] args) {
        SetZeroes setZeros = new SetZeroes();
        int[][] matrix = new int[][]{{1,1,1},{1,0,1},{1,1,1}};
        setZeros.setZeroes(matrix);
    }
}
